// IO函子
const fp = require('lodash/fp')

class IO {
    static of (value) {
        return new IO(function() {
            return value
        })
    }

    constructor (value) {
        this._value = value
    }

    map (fn) {
        return new IO(fp.flowRight(fn, this._value))
    }
}
// 调用
let r = IO.of(process).map(p => p.execPath)
// console.log(r)
console.log(r._value()) // ==> map return new IO(fp.flowRight(fn, this._value))
// console.log(r._value()()) // ==> map return IO.of(fp.flowRight(fn, this._value))